package com.rchat.pocmini.common;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.aso.common.http.utils.NetErrCode;
import com.aso.common.utils.ToastUtils;
import com.rchat.pocmini.R;

import butterknife.BindString;
import butterknife.ButterKnife;

/**
 * ButterKnife.bind(this)：快捷插件库
 * Created by itsdf07 on 2017/7/7 16:53.
 * E-Mail: 923255742@qq.com
 * GitHub: https://github.com/itsdf07
 */

public abstract class BaseActivity extends AppCompatActivity {
    /**
     * 自定义广播：结束当前Activity
     */
    public static final String FINISH_ACTIVITY = "com.rchat.finishactivity";

    @BindString(R.string.tip_net_error)
    String mStringTip_error;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        doBeforeSetcontentView();
        setContentView(getLayoutId());
        ButterKnife.bind(this);
        this.initView();
        doAfterSetcontentView();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //TODO 友盟统计之类的
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        unregisterReceiver(finishActivityReceiver);
//        ActivityStackManager.getStackManagerUtils().finishActivity(this);
        super.onDestroy();
    }
    /*************************be related to custom methods ********************************/

    /**
     * 设置layout前配置
     */
    public void doBeforeSetcontentView() {
        // 把actvity放到application栈中管理
//        ActivityStackManager.getStackManagerUtils().addActivity(this);
    }

    /**
     * 设置layout后配置
     */
    public void doAfterSetcontentView() {
        registerCustomReceiver();
    }

    /**
     * 获取布局文件
     *
     * @return
     */
    public abstract int getLayoutId();

    /**
     * 初始化view
     */
    public abstract void initView();

    /*************************be related to Tip********************************/
    /**
     * 短暂显示Toast提示
     *
     * @param tip
     */
    public void showShortToast(String tip) {
        ToastUtils.showToast(this, tip);
    }

    /**
     * 短暂显示Toast提示
     *
     * @param tipId
     */
    public void showShortToast(int tipId) {
        showShortToast(getString(tipId));
    }

    /**
     * 显示网络异常toast
     **/
    public void showNetError() {
        showNetError(mStringTip_error);
    }

    /**
     * 显示网络异常toast
     *
     * @param errorTip
     */
    public void showNetError(String errorTip) {
        showShortToast(errorTip);
    }

    /**
     * 显示网络异常toast
     *
     * @param errCode
     * @param errorTip
     */
    public void showNetError(String errCode, String errorTip) {
        if (NetErrCode.ERR_FAILURE.equals(errCode)) {
            showNetError();
        } else {
            showShortToast(errorTip);
        }
    }

    /**
     * 显示网络异常toast
     *
     * @param errorTip
     */
    public void showNetError(int errorTip) {
        showShortToast(errorTip);
    }

    /************************* 广播、handler、接口 之类********************************/
    // 写一个广播的内部类，当收到动作时，结束activity
    /**
     * 广播功能：收到该广播时，结束当前Activity
     * 用于Ping 不通网络时，强行跳转至登录页
     */
    private BroadcastReceiver finishActivityReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            unregisterReceiver(this); // 这句话必须要写要不会报错，不写虽然能关闭，会报一堆错
            ((Activity) context).finish();
        }
    };

    /**
     * 注册自定义广播
     */
    private void registerCustomReceiver() {
        // 在当前的activity中注册广播
        IntentFilter filter = new IntentFilter();
        filter.addAction(FINISH_ACTIVITY);
        registerReceiver(finishActivityReceiver, filter); // 注册
    }

}
